<?php
/**
 * @特惠赚
 * Author: 小谢
 * Date: 2019-5-9
 */
namespace app\api\controller;
use think\Controller;

class Base extends Controller {
    
    //定义json格式
    public function ajaxReturn($data,$type = 'json'){                        
        exit(json_encode($data));
    }

    /**
     * 下面是生成token方法代码，验证token(防止篡改数据)
     * @param  [array] $arr [全部请求参数]
     * @return [json]      [token验证结果]
    */
    public function setToken() {
         //生成一个不会重复的字符串
         $str = md5(uniqid(md5(microtime(true)),true));
         $str = sha1($str);//加密
         return $str;
    }

    //这里设置是token如果七天没被调用则需要重新登陆，也就是说用户7天没有操作APP则需要重新登陆，如果某个接口被调用，则会重新刷新过期时间
    public function checkToken($token) {
        $codition['token'] = $token;
        $res = M('user_token')->where($codition)->field('time_out')->find();
        if (!empty($res)) { 
            if (time() - $res['time_out'] > 0) {
                //token长时间未使用而过期，需重新登陆
                return ['status'=>0,'errorcode'=>0,'errmsg'=>'Token长时间未使用而过期，需重新登陆','data'=>self::emptyObject()];
            }
            $new_time_out = time() + 604800;
            $r = M('user_token')->where($codition)->update(['time_out' => $new_time_out]);
            if($r) {
            	return ['status'=>1,'errorcode'=>0,'errmsg'=>'Token验证通过','user_id'=>$res['user_id']];
            }
        }
        //token错误验证失败
        return ['status'=>0,'errorcode'=>0,'errmsg'=>'token错误验证失败','data'=>self::emptyObject()];
    }

    //定义空对象
    public static function emptyObject() {
        return (object)[];        
    }

    /*
    * 定义返回数据
    * @param int $status 状态码
    * @param int $errorcode 业务逻辑状态码
    * @param string $errmsg 信息内容
    * @param Array  $data
    * return Array
    */
    public function callBack($status,$errorcode='',$errmsg,$data) {
        return ['status'=>$status,'errorcode'=>$errorcode,'errmsg'=>$errmsg,'data'=>$data];
    }

}